<!DOCTYPE html>

<html>
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, user-scalable=no">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
        <title>Sample 02 - ビット演算子とルックアップテーブルを使って高速化しよう!!</title>
        <style>
            * {
                margin: 0px;
                padding: 0px;
            }
        </style>
        <script charset="UTF-8" src="enchant.js"></script>
        <script charset="UTF-8" src="dummysprite.enchant.js"></script>
        <script charset="UTF-8">
            // 使いやすくするおまじない
            enchant();
            
            // 十字キーを角度に変換するルックアップテーブル
            var ARROW_TO_ANGLE_TABLE = {
                // 上下左右
                0x0001: 270,    // 下
                0x0002:   0,    // 右
                0x0004:  90,    // 上
                0x0008: 180,    // 左
                // 斜め
                0x0006:  45,    // 右上
                0x0003: 315,    // 右下
                0x000c: 135,    // 左上
                0x0009: 225,    // 左下
                // 三方向同時押し対応
                // 想定外の操作だが対応しといたほうが無難
                0x000e:  90,    // 右上左
                0x000d: 180,    // 上左下
                0x000b: 270,    // 左下右
                0x0007:   0,    // 下右上
            };
            
            // 移動速度
            var SPEED = 4;
            
            // 初期化時処理
            window.onload = function() {
                // Game インスタンスを生成
                var game = new Game(320, 320);
                // 初期化
                game.onload = function() {
                    // 背景色を設定
                    this.rootScene.backgroundColor = "black";
                    // ダミースプライトを生成
                    var dummySprite = new DummySprite(20, 20, "red");
                    dummySprite.moveTo(160-10, 160-10);
                    this.rootScene.addChild(dummySprite);
                    // 更新イベントを登録
                    this.rootScene.addEventListener("enterframe", function(e){
                        var input = game.input;
                        
                        // 角度で移動させる
                        var arrowBit = (input.left << 3) | (input.up << 2) | (input.right << 1) | (input.down << 0);
                        var angle = ARROW_TO_ANGLE_TABLE[ arrowBit ];
                        if (angle !== undefined) {
                            var vx = Math.cos(angle*Math.PI/180) * SPEED;
                            var vy =-Math.sin(angle*Math.PI/180) * SPEED;
                            dummySprite.moveBy(vx, vy);
                        }
                    });
                };
                // 開始
                game.start();
            };
        </script>
    </head>
    <body>
        <h1>Sample 02 - ビット演算子とルックアップテーブルを使って高速化しよう!!</h1>
    </body>
</html>